SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
CREATE PROCEDURE [dbo].[spPartidaDePersonalCargos]

@from INT, 
@por INT,
@fuente INT,
@fecha varchar(10),
@nivel INT,
@organizacion INT,
@cargo INT,
@org INT

AS
SET NOCOUNT ON
-- CANTIDAD X CARGOS
IF @from = 1 BEGIN
	-- CARGOS POR PROVINCIA
	IF @por = 1 BEGIN
	
		select isnull(c.cargo, 'Nulo') AS CARGO, C.IdCargo AS ID, count(isnull(s.cargosalarial, 0)) AS CANTIDAD 
		from tb_serviciosagentes as s
		inner join tb_cargos c on c.idcargo = s.cargosalarial
		where s.financiamiento = @fuente and
		s.tipodeservicio = 1 and
		s.regimenlaboral = 12 and
		c.regimensalarial = 12 and
		(s.situacionrevista = 1 or s.situacionrevista = 2) and
		@fecha between s.fechaalta and isnull(s.fechabaja, getdate())
		group by c.cargo, c.idcargo
		order by c.cargo
	END

	-- CARGOS POR NIVEL
	IF @por = 2 BEGIN
		select isnull(c.cargo, 'Nulo') AS CARGO, C.IdCargo AS ID, count(isnull(s.cargosalarial, 0)) AS CANTIDAD   
		from tb_serviciosagentes as s 
		inner join tb_organizaciones as o on s.ubicacionorig = o.idorganizaciones
		inner join tb_suborganizaciones as so on so.org = o.idorganizaciones
		inner join tb_cargos c on c.idcargo = s.cargosalarial
		where s.financiamiento = @fuente and
		s.tipodeservicio = 1 and
		s.regimenlaboral = 12 and
		c.regimensalarial = 12 and
		(s.situacionrevista = 1 or s.situacionrevista = 2) and
		@fecha between s.fechaalta and isnull(s.fechabaja, getdate()) 
		and so.nivel = @nivel
		group by c.cargo, c.idcargo
		order by c.cargo
	END

	-- CARGOS POR ORGANIZACION 
	IF @por = 3 BEGIN
		select isnull(c.cargo, 'Nulo') AS CARGO, C.IdCargo AS ID, count(isnull(s.cargosalarial, 0)) AS CANTIDAD   
		from tb_serviciosagentes as s 
		inner join tb_organizaciones as o on s.ubicacionorig = o.idorganizaciones
		inner join tb_suborganizaciones as so on so.org = o.idorganizaciones
		inner join tb_cargos c on c.idcargo = s.cargosalarial
		where s.financiamiento = @fuente and
		s.tipodeservicio = 1 and
		s.regimenlaboral = 12 and
		c.regimensalarial = 12 and
		(s.situacionrevista = 1 or s.situacionrevista = 2) and
		@fecha between s.fechaalta and isnull(s.fechabaja, getdate()) 
		and so.nivel = @nivel and so.org = @organizacion
		group by c.cargo, c.idcargo
		order by c.cargo
	END
END

-- CANTIDAD POR ORGANIZACION
IF @from = 2 BEGIN
	-- CARGOS POR PROVINCIA
	IF @por = 1 BEGIN
	
		select isnull(o.nombre, 'Nulo') AS CARGO, O.IdOrganizaciones AS IDOrg, count(isnull(s.cargosalarial, 0)) AS CANTIDAD 
		from tb_serviciosagentes as s
		inner join tb_cargos c on c.idcargo = s.cargosalarial
		inner join tb_organizaciones o on o.idorganizaciones = s.ubicacionorig
		where s.financiamiento = @fuente and
		s.tipodeservicio = 1 and
		s.regimenlaboral = 12 and
		c.regimensalarial = 12 and
		(s.situacionrevista = 1 or s.situacionrevista = 2) and
		@fecha between s.fechaalta and isnull(s.fechabaja, getdate())
		and c.idcargo = @cargo
		group by o.nombre, o.idorganizaciones
	END

	-- CARGOS POR NIVEL
	IF @por = 2 BEGIN
		select isnull(o.nombre, 'Nulo') AS CARGO, O.IdOrganizaciones IDOrg, count(isnull(s.cargosalarial, 0)) AS CANTIDAD   
		from tb_serviciosagentes as s 
		inner join tb_organizaciones as o on s.ubicacionorig = o.idorganizaciones
		inner join tb_suborganizaciones as so on so.org = o.idorganizaciones
		inner join tb_cargos c on c.idcargo = s.cargosalarial
		where s.financiamiento = @fuente and
		s.tipodeservicio = 1 and
		s.regimenlaboral = 12 and
		c.regimensalarial = 12 and
		(s.situacionrevista = 1 or s.situacionrevista = 2) and
		@fecha between s.fechaalta and isnull(s.fechabaja, getdate()) 
		and so.nivel = @nivel and c.idcargo = @cargo
		group by o.nombre, o.idorganizaciones
	END

	-- CARGOS POR ORGANIZACION 
	IF @por = 3 BEGIN
		select isnull(o.nombre, 'Nulo') AS CARGO, O.IdOrganizaciones IDOrg, count(isnull(s.cargosalarial, 0)) AS CANTIDAD   
		from tb_serviciosagentes as s 
		inner join tb_organizaciones as o on s.ubicacionorig = o.idorganizaciones
		inner join tb_suborganizaciones as so on so.org = o.idorganizaciones
		inner join tb_cargos c on c.idcargo = s.cargosalarial
		where s.financiamiento = @fuente and
		s.tipodeservicio = 1 and
		s.regimenlaboral = 12 and
		c.regimensalarial = 12 and
		(s.situacionrevista = 1 or s.situacionrevista = 2) and
		@fecha between s.fechaalta and isnull(s.fechabaja, getdate()) 
		and so.nivel = @nivel and so.org = @organizacion and c.idcargo = @cargo
		group by o.nombre, o.idorganizaciones
	END
END

-- CANTIDAD POR PERSONA
IF @from = 3 BEGIN
	-- CARGOS POR PROVINCIA
	IF @por = 1 BEGIN
	
		select isnull(a.nombres, 'Nulo') AS CARGO, SR.Mnemo, count(isnull(s.cargosalarial, 0)) AS CANTIDAD 
		from tb_serviciosagentes as s
		inner join tb_cargos c on c.idcargo = s.cargosalarial
		inner join tb_organizaciones o on o.idorganizaciones = s.ubicacionorig
		inner join tb_agentes a on a.idagente = s.agente
		inner join tb_situacionrevista sr on sr.idsituacionrevista = s.situacionrevista
		where s.financiamiento = @fuente and
		s.tipodeservicio = 1 and
		s.regimenlaboral = 12 and
		c.regimensalarial = 12 and
		(s.situacionrevista = 1 or s.situacionrevista = 2) and
		@fecha between s.fechaalta and isnull(s.fechabaja, getdate())
		and c.idcargo = @cargo and o.idorganizaciones = @org
		group by a.nombres, sr.mnemo
	END

	-- CARGOS POR NIVEL
	IF @por = 2 BEGIN
		select isnull(a.nombres, 'Nulo') AS CARGO, SR.Mnemo, count(isnull(s.cargosalarial, 0)) AS CANTIDAD   
		from tb_serviciosagentes as s 
		inner join tb_organizaciones as o on s.ubicacionorig = o.idorganizaciones
		inner join tb_suborganizaciones as so on so.org = o.idorganizaciones
		inner join tb_cargos c on c.idcargo = s.cargosalarial
		inner join tb_agentes a on a.idagente = s.agente
		inner join tb_situacionrevista sr on sr.idsituacionrevista = s.situacionrevista
		where s.financiamiento = @fuente and
		s.tipodeservicio = 1 and
		s.regimenlaboral = 12 and
		c.regimensalarial = 12 and
		(s.situacionrevista = 1 or s.situacionrevista = 2) and
		@fecha between s.fechaalta and isnull(s.fechabaja, getdate()) 
		and so.nivel = @nivel and c.idcargo = @cargo and o.idorganizaciones = @org
		group by a.nombres, sr.mnemo
	END

	-- CARGOS POR ORGANIZACION 
	IF @por = 3 BEGIN
		select isnull(a.nombres, 'Nulo') AS CARGO, SR.Mnemo, count(isnull(s.cargosalarial, 0)) AS CANTIDAD   
		from tb_serviciosagentes as s 
		inner join tb_organizaciones as o on s.ubicacionorig = o.idorganizaciones
		inner join tb_suborganizaciones as so on so.org = o.idorganizaciones
		inner join tb_cargos c on c.idcargo = s.cargosalarial
		inner join tb_agentes a on a.idagente = s.agente
		inner join tb_situacionRevista sr on sr.idsituacionrevista = s.situacionrevista
		where s.financiamiento = @fuente and
		s.tipodeservicio = 1 and
		s.regimenlaboral = 12 and
		c.regimensalarial = 12 and
		(s.situacionrevista = 1 or s.situacionrevista = 2) and
		@fecha between s.fechaalta and isnull(s.fechabaja, getdate()) 
		and so.nivel = @nivel and so.org = @organizacion and c.idcargo = @cargo
		group by a.nombres, sr.mnemo
	END
END
GO
